{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据类型\n",
    "\n",
    "源码：`tvm/include/tvm/runtime/data_type.h`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "vscode": {
     "languageId": "plaintext"
    }
   },
   "source": [
    "`DataType` 类，它表示运行时的基本数据类型。这个类提供了一些方法来检查和操作数据类型的各种属性，例如类型代码、位数、通道数等。此外，它还提供了一些静态方法来构造特定的数据类型，如整数类型和无符号整数类型。\n",
    "\n",
    "以下是一些关键部分的解释：\n",
    "\n",
    "- `enum TypeCode`: 定义了一组枚举值，用于表示不同的数据类型代码。这些代码与 DLPack 库中的类型代码保持一致。\n",
    "- `DataType()`: 默认构造函数，创建空的数据类型。\n",
    "- `explicit DataType(DLDataType dtype)`: 接受 `DLDataType` 对象作为参数的构造函数，用于从现有的 DLPack 数据类型创建新的 `DataType` 对象。\n",
    "- `DataType(int code, int bits, int lanes, bool is_scalable = false)`: 接受类型代码、位数、通道数和一个可选的布尔值（表示是否可伸缩）作为参数的构造函数，用于创建具有指定属性的新数据类型。\n",
    "    `DataType` 对象接收四个参数：\n",
    "    1. `code`：类型代码，表示数据类型的标识符。\n",
    "    2. `bits`：位数，表示数据类型的大小（以位为单位）。\n",
    "    3. `lanes`：通道数，表示数据类型的通道数量。\n",
    "    4. `is_scalable`：一个布尔值，表示数据类型是否可伸缩。默认值为`false`。\n",
    "\n",
    "    在构造函数内部，首先将`code`和`bits`转换为`uint8_t`类型，并将它们分别赋值给`data_.code`和`data_.bits`。然后，根据`is_scalable`的值，对`lanes`进行处理。如果`is_scalable`为`true`，则检查`lanes`是否大于1，否则抛出异常。接着，将处理后的`lanes`转换为`uint16_t`类型并赋值给`data_.lanes`。\n",
    "\n",
    "    最后，根据`code`的值，检查`bits`是否符合预期。如果`code`等于`kBFloat`，则检查`bits`是否等于16；如果`code`等于`kE4M3Float`或`kE5M2Float`，则检查`bits`是否等于8。如果不满足这些条件，将抛出异常。\n",
    "- `operator DLDataType() const`: 将 `DataType` 对象转换为 `DLDataType` 对象的转换运算符。\n",
    "- `static DataType Int(int bits, int lanes = 1)`: 静态方法，用于创建具有指定位数和通道数的整数类型。\n",
    "- `static DataType UInt(int bits, int lanes = 1)`: 静态方法，用于创建具有指定位数和通道数的无符号整数类型。\n",
    "\n",
    "此外，还有一些其他的方法用于比较、修改和查询数据类型的属性，例如 `is_scalar()`, `is_float()`, `is_vector_bool()`, `with_lanes()`, `with_bits()` 等。这些方法允许用户在运行时检查和操作数据类型的各种特性。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "xinet",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
